2-7 u@韃P僂うxs庛J

MATLAB 在進行各種運算時,會將變數儲存在記憶體內,這些儲存變數的記憶體空間稱為基本工作空間(Base Workspace)或簡稱工作空間(Workspace)。當每次 MATLAB 呼叫執行某一函數時,即進入該函數的暫時工作空間(或可視為是相對於基本工作空間的下層暫時工作空間),函數可在此暫時工作間內產生各種變數並進行運算,而不會影響到基本工間空間內的變數。當函數執行結束時,MATLAB 會同時刪除函數的暫時工作空間(當然也會刪除儲存於其內的所有變數),並回到 MATLAB 的基本工作空間。以下簡述幾個有關工作空間的指令。

若要檢視現存於工作空間(Workspace)的變數,可鍵入 who:

>> who Your variables are: A ans s x z B i t y

在上例中,只顯這些是由使用者定義的變數的名稱。若要知道這些變數更詳細的資料(例如:變數占用的記憶體大小、及其儲存的資料型態別),則可使用 whos 指令,例如:

>> whos Name Size Bytes Class A 2x4 64 double array B 1x3 24 double array ans 1x18 36 char array i 1x1 8 double array s 1x4 32 double array t 1x5 40 double array x 1x6 48 double array y 1x1 8 double array z 1x1 16 double array (complex) Grand total is 47 elements using 276 bytes

Hint
檢視工作空間變數的其他方式:在 MATLAB 命令視窗內直接輸入 workspace 指令,亦可達到檢視工作空間的變數效果。

同時也可以使用 clear 指令來清除或刪除工作空間內的某一特定或所有變數,以避免記憶體的閒置與浪費:

>> clear A % 刪除工作空間內的變數 A >> clear all % 刪除工作空間內的所有變數

值得注意的是,MATLAB 有些永久常數(Permanent Constants),雖然在工作空間中看不 到,但使用者可直接取用,例如:

>> pi ans = 3.1416

常使用到的 MATLAB 的永久常數,可列出如下:

常數 說明
i 或 j基本虛數單位(即 $\sqrt{-1}$)
eps系統的浮點(Floating-point)精確度
inf無限大(即 $\infty$), 例如:1/0
nan 或 NaN非數值(Not A Number),例如:0/0
pi圓周率(= 3.1415926...)
realmax系統所能表示的最大數值
realmin系統所能表示的最小數值
nargin函數的輸入引數個數
nargout函數的輸出引數個數

在大量長時間執行 MATLAB 運算中,使用者通常希望能將計算所得各變數內容儲存在檔案中(一般會暫時儲存在工作空間內),以便將來可重新載入以進行其他處理。此時,使用者可用 save 指令儲存變數內容到檔案,而後再用 load 指令將檔案的內容載入到工作空間以進行其他處理,以下依次分述之。

在不加任何選項(Options)時,save 指令會將工作空間內的變數以二進制(Binary)的方式儲存至副檔名為 mat 的檔案:

首先我們先跳到本章的範例目錄:

>> cd 'd:\matlabBook\MATLAB程式設計:入門篇\02-初探MATLAB'

以下為使用 save 指令的一個例子:

>> clear all % 清除工作空間內的所有變數 >> x = 10; y = [1, 2, 3]; % x, y 為新變數 >> whos % 列出工作空間內所有變數 Name Size Bytes Class x 1x1 8 double array y 1x3 24 double array Grand total is 4 elements using 32 bytes >> save test x y % 將變數 x 與 y 儲存至 test.mat >> dir *.mat % 列出目前工作目錄中的所有 MAT 檔案 test.mat >> delete test.mat % 刪除檔案 test.mat

以二進制的方式儲存工作空間的變數,通常檔案會比較小,而且在載入時速度較快,缺點是無法用普通的文書軟體(例如:MS Word 或記事本)來檢視檔案內容。

若想看到檔案內容,則必需以 ASCII 的檔案格式來儲存工作空間的變數:

在 save 指令使用 –ascii 選項後,會有下列現象:

一般而言,以二進制所儲存的檔案,在讀取時會比較快,所佔的空間也比較小,所以我們應該盡量以二進制方式儲存資料。

在將工作空間的變數儲存於檔案後,使用 load 指令可將該檔案所儲存之變數載入工作空間,其格式如下:

若以 ASCII 格式載入,則變數名稱即為檔案名稱(但不包含副檔名)。若以二進制載入,則可保留原有的變數名稱,例如:

>> clear all; % 清除工作空間中的變數 >> x = 1:10; >> save testfile.dat x -ascii % 將 x 以 ASCII 格式存至名為 % testfile.dat 的檔案 >> load testfile.dat % 載入 testfile.dat >> who % 列出工作空間中的變數 Your variables are: testfile x

注意在上述過程中,由於是以 ASCII 格式儲存與載入,所以產生了一個與檔案名稱相同的變數 testfile,此變數的值和原變數 x 完全相同。

Hint
如果你比較習慣使用圖形介面來進行資料匯入,可由 MATLAB 桌面的「File/Import Data...」來進行。

有關 MATLAB 對於檔案的讀寫功能,讀者可詳見第十八章「檔案輸出及輸入」。


MATLAB程式設計:入門篇